
import pandas as pd
import numpy as np

# 1. 生成一个序列
s = pd.Series([1, 2, 3, np.nan, 10, 11])
print(s)

# 2. 创建dataframe
dates = pd.date_range("20210101", periods=6)
print(dates)

# numpy 矩阵创建dataframe
df = pd.DataFrame(np.random.randn(6, 5), index=dates, columns=["a", "b", "c", "d", "e"])
print(df)

# 通过numpy reshape创建dataframe
df = pd.DataFrame(np.arange(30).reshape((6, 5)))
print(df)

# 通过字典创建dataframe，每个元素可以是不同类型的值
# 每个元素的长度为1时，默认使用复制，当长度不为1时，各个列的长度必须一致，否则报错
# 比如 pd.Series([1, 2, 3])会创建失败，因为pd.series创建的和np.array，创建的序列长度不一致
df = pd.DataFrame(
    {
        "a": 1,
        "b": pd.Timestamp(20210101),
        'c': pd.Series([1, 2, 3, 4]),  # chang
        'd': np.array([1]*4, dtype='float32'),
        'e': pd.Categorical(['yes', 'no', 'no', 'yes']),
        'f': 'ff'
    }, index=[3, 4, 1, 2])

print(df)

# 输入每列数据的类型
print(df.dtypes)

# 输出行的序号
print(df.index)

# 输出列名
print(df.columns)

# 输出dataframe值，输出为list的嵌套或array
print(df.values)

# 输出dataframe的数字统计信息，非数字信息不会统计，也不会输出
print(df.describe())

# dataframe的反转，行变成列，列变成行
print(df.T)

# 按行名称或列名称排序
print(df.sort_index(axis=1, ascending=False))

print(df.sort_values(by="c", ascending=False))
